/**
 * 
 */
package com.evil.DB_Utils;

import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.SQLException;

/******************************************
 * 工程名：Download<br>
 * 包名：com.evil.DB_Utils<br>
 * 时间：2016年6月10日 下午2:18:40<br>
 * 作者：白雨濃 evil<br>
 * 邮箱：evilbai@foxmail.com<br>
 * 内容：更新返回接口<br>
 ******************************************/
public interface UpdateCallBack
{
	/**
	 * 使用时候需要用while，不像查询一样不需要！！！
	 * 
	 * @param add
	 */
	public abstract void onCallBack(Add add, int i);

	public class Add
	{
		private PreparedStatement preparedStatement;
		private boolean isLog;

		public Add()
		{
			super();
		}

		public Add set(PreparedStatement preparedStatement)
		{
			this.preparedStatement = preparedStatement;
			return this;
		}

		/**
		 * 添加
		 * 
		 * @param s
		 * @return
		 */
		public void add(int index, String s)
		{
			try
			{
				preparedStatement.setString(index, s);
			}
			catch (SQLException e)
			{
				e.printStackTrace();
			}

		}

		/**
		 * 添加
		 * 
		 * @param i
		 * @return
		 */
		public void add(int index, int i)
		{
			try
			{
				preparedStatement.setInt(index, i);
			}
			catch (SQLException e)
			{
				e.printStackTrace();
			}

		}

		/**
		 * 添加
		 * 
		 * @param date
		 * @return
		 */
		public void add(int index, Date date)
		{
			try
			{
				preparedStatement.setDate(index, date);
			}
			catch (SQLException e)
			{
				e.printStackTrace();
			}

		}

		/**
		 * 添加
		 * 
		 * @param f
		 * @return
		 */
		public void add(int index, float f)
		{
			try
			{
				preparedStatement.setFloat(index, f);
			}
			catch (SQLException e)
			{
				e.printStackTrace();
			}

		}

		/**
		 * 添加
		 * 
		 * @param object
		 * @return
		 */
		public void add(int index, Object object)
		{
			try
			{
				preparedStatement.setObject(index, object);
			}
			catch (SQLException e)
			{
				e.printStackTrace();
			}
		}

		/**
		 * 是否打印日志
		 * 
		 * @param isLog
		 * @return
		 */
		public void isLog(boolean isLog)
		{
			this.isLog = isLog;
		}

		public String build()
		{
			String count = "";
			try
			{
				if(isLog)
					System.out.println(preparedStatement);
				count = preparedStatement.executeUpdate() + "";
			}
			catch (SQLException e)
			{
				if (e.toString().indexOf("PRIMARY") > 0)
					return ErrorInfo.ERROR_EXIST_PRIMARY.toString();
				else if (e.toString().endsWith(
						"ON DELETE NO ACTION ON UPDATE NO ACTION)"))
					return ErrorInfo.ERROR_NO_FOREIGN_KEY.toString();
				else if (e.toString().indexOf(
						"No value specified for parameter") > 0)
					return ErrorInfo.ERROR_NOVALUE_FORPARAMETER.toString();
				else if (e.toString().indexOf("Parameter index out of range") > 0)
					return ErrorInfo.ERROR_MOREVALUE_FORPARAMETER.toString();
				else
					e.printStackTrace();
			}
			return count;
		}

		/**
		 * 关闭流
		 */
		public void close()
		{
			try
			{
				if (preparedStatement != null)
					preparedStatement.close();
			}
			catch (SQLException e)
			{
				e.printStackTrace();
			}
		}

	}
}